Nos complace presentar un innovador proyecto de machine learning enfocado en la transformación digital del sector asegurador. El objetivo principal es abordar dos desafíos clave en la industria; el análisis exploratorio de los datos de la compañía aseguradora LS y la creación de modelos predictivos para estimar el coste de siniestros y clasificarlos de manera eficiente.
En primer lugar, el análisis exploratorio nos permitirá identificar patrones, tendencias y posibles anomalías en el conjunto de datos proporcionado por la compañía aseguradora. Mediante técnicas avanzadas de visualización y análisis estadístico, seremos capaces de extraer información valiosa y descubrir oportunidades de mejora en la gestión de riesgos y la toma de decisiones.
En segundo lugar, el desarrollo de modelos predictivos basados en machine learning nos permitirá anticiparnos a los costes de siniestros y clasificarlos de manera más precisa. Estos modelos, entrenados con un vasto conjunto de datos históricos, nos brindarán una herramienta eficaz para optimizar la evaluación del riesgo, la asignación de recursos y el diseño de estrategias de prevención.
Con la implementación de este proyecto, aspiramos a impulsar la eficiencia operativa y la rentabilidad de la compañía aseguradora, así como mejorar la calidad del servicio ofrecido a sus clientes. Estamos convencidos de que la adopción de tecnologías de machine learning y el análisis de datos en el sector asegurador es crucial para mantenerse competitivo en un mercado cada vez más exigente y en constante evolución.
¡Síguenos en este apasionante viaje hacia la digitalización e innovación en el mundo de los seguros!
paste(R.Version()$version.string)
## [1] "R version 4.1.2 (2021-11-01)"
library(readr) # Lectura de datos especialmente CSVs
library(readxl) # Lectura de datos especialmente Excel (.xls y .xlsx)
library(dplyr) # Para manipulación y transformación de datos en R
library(tidyr) # Permite manipular la forma de conjuntos de datos en R
library(DT) # Mejora el trabajo con dataframes
library(kableExtra) # Mejora y estiliza tablas
library(ggplot2) # Para gráficos en R
library(GGally) # Extensión de ggplot2, facilitando la visualización de pares y combinaciones de datos
library(gridExtra) # Herramientas para trabajar con múltiples gráficos de ggplot2
library(cowplot) # Para mejoras de gráficos de ggplot2
library(ggcorrplot) # Visualización de matrices de correlación usando ggplot2
library(gmodels) # Varios modelos matemáticos y herramientas estadísticas
library(ggfortify) # Extensión de ggplot2 con funciones para visualizar resultados de varios modelos estadísticos
library(ggridges) # Para hacer Density Ridgeline Plot que son diagramas de densidad por agrupaciones que definamos
library(caret) # Construcción y evaluación de modelos de aprendizaje automático
library(scales) # Herramientas de escalado y formateo de datos
library(class) # Funciones para clasificación
library(distances) # Herramientas para trabajar con distancias y métricas
library(visreg) # Visualización de modelos de regresión
library(rpart) # Paquete de partición recursiva y árboles de regresión
library(rpart.plot) # Visualización de árboles rpart
library(rattle) # Interfaz gráfica y utilidades para minería de datos
library(randomForest) # Paquete que implementa el algoritmo de Random Forest para clasificación y regresión
library(e1071) # Funciones de estadística y aprendizaje automático, incluye máquinas de soporte vectorial
library(pROC) # Herramientas para visualizar y comparar ROC curves
library(cluster) # Métodos de clustering
library(tidyverse) # Colección de paquetes relacionados con la manipulación y visualización de datos (incluye ggplot2, dplyr, tidyr ...)
library(stringr) # Manipulación de cadenas de caracteres
library(Metrics) # Funciones para calcular métricas de modelos predictivos
library(factoextra) # Herramientas de visualización para resultados de descomposición
library(NbClust) # Determina y proporciona el número óptimo de clusters por diferentes métodos
Leemos el dataset original.
LS_original <- read_excel("LS.xlsx")
LS <- LS_original %>% mutate_at(vars("f_ocurrencia", "f_declaracion", "f_cierre"), as.Date)
str(LS)
## tibble [143,930 × 15] (S3: tbl_df/tbl/data.frame)
## $ siniestro : chr [1:143930] "LS_AS0000000089" "LS_AS0000000092" "LS_AS0000000094" "LS_AS0000000095" ...
## $ producto : chr [1:143930] "CROH" "CRSCEP" "CRMM" "SPF" ...
## $ ramo : chr [1:143930] "DJ" "DJ" "DJ" "DJ" ...
## $ tipo : chr [1:143930] "RA" "RA" "RA" "SD" ...
## $ f_ocurrencia : Date[1:143930], format: "2014-02-20" "2014-03-14" ...
## $ f_declaracion : Date[1:143930], format: "2014-02-25" "2014-03-20" ...
## $ f_cierre : Date[1:143930], format: "2014-02-25" "2014-04-25" ...
## $ estado : chr [1:143930] "TERMINADO" "TERMINADO" "TERMINADO" "TERMINADO" ...
## $ cobertura : chr [1:143930] "CONTRATOS LABORALES: CONFLICTOS INDIVIDUALES DE TRABAJO (SOLO ANTE LA EMPRESA EMPLEADORA)" "RECLAMACION DAÑOS NO CONTRACTUAL MATERIALES" "DCHOS RELATIVOS VIVIENDA: RECLAMACION DAÑOS DE TERCEROS (NO CUBIERTOS RUIDOS NI DEFECTOS EN LA CONSTRUCCION)" "ASISTENCIA PRESENCIAL DE UN ABOGADO EN NOTARIA PARA LA FIRMA DE CONTRATO DE COMPRA O VENTA DE VIVIENDA HABITUAL DE TOMADOR" ...
## $ prov_inicial_cob: num [1:143930] 30 330 12 0 500 12 12 900 300 300 ...
## $ prov_cob : num [1:143930] 0 0 0 0 0 0 0 0 0 0 ...
## $ pago_total_cob : num [1:143930] 0 3.54 0 36.3 0 0 0 0 0 0 ...
## $ coste_total_cob : num [1:143930] 0 3.54 0 36.3 0 0 0 0 0 0 ...
## $ medio : chr [1:143930] "EXTRAJUDICIAL" "LTDO PARTICULAR" "EXTRAJUDICIAL" "LTDO RED" ...
## $ materia : chr [1:143930] "LABORAL" "CIVIL" "INMUEBLE" "INMUEBLE" ...
summary(LS)
## siniestro producto ramo tipo
## Length:143930 Length:143930 Length:143930 Length:143930
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## f_ocurrencia f_declaracion f_cierre
## Min. :2014-01-01 Min. :2014-01-07 Min. :2014-01-07
## 1st Qu.:2017-02-24 1st Qu.:2017-06-01 1st Qu.:2017-10-25
## Median :2019-07-01 Median :2019-09-27 Median :2019-11-14
## Mean :2019-03-03 Mean :2019-05-21 Mean :2019-08-05
## 3rd Qu.:2021-04-27 3rd Qu.:2021-07-06 3rd Qu.:2021-08-25
## Max. :2022-12-30 Max. :2022-12-30 Max. :2022-12-31
## NA's :14134
## estado cobertura prov_inicial_cob prov_cob
## Length:143930 Length:143930 Min. : 0.0 Min. : 0.00
## Class :character Class :character 1st Qu.: 12.0 1st Qu.: 0.00
## Mode :character Mode :character Median : 38.0 Median : 0.00
## Mean : 135.2 Mean : 22.73
## 3rd Qu.: 85.0 3rd Qu.: 0.00
## Max. :5000.0 Max. :10000.00
##
## pago_total_cob coste_total_cob medio materia
## Min. : -544.5 Min. : -544.5 Length:143930 Length:143930
## 1st Qu.: 0.0 1st Qu.: 0.0 Class :character Class :character
## Median : 0.0 Median : 0.0 Mode :character Mode :character
## Mean : 124.7 Mean : 147.5
## 3rd Qu.: 104.2 3rd Qu.: 111.6
## Max. :10840.3 Max. :12328.1
##
head(LS, 10) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| siniestro | producto | ramo | tipo | f_ocurrencia | f_declaracion | f_cierre | estado | cobertura | prov_inicial_cob | prov_cob | pago_total_cob | coste_total_cob | medio | materia |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LS_AS0000000089 | CROH | DJ | RA | 2014-02-20 | 2014-02-25 | 2014-02-25 | TERMINADO | CONTRATOS LABORALES: CONFLICTOS INDIVIDUALES DE TRABAJO (SOLO ANTE LA EMPRESA EMPLEADORA) | 30 | 0 | 0.00 | 0.00 | EXTRAJUDICIAL | LABORAL |
| LS_AS0000000092 | CRSCEP | DJ | RA | 2014-03-14 | 2014-03-20 | 2014-04-25 | TERMINADO | RECLAMACION DAÑOS NO CONTRACTUAL MATERIALES | 330 | 0 | 3.54 | 3.54 | LTDO PARTICULAR | CIVIL |
| LS_AS0000000094 | CRMM | DJ | RA | 2014-02-26 | 2014-04-02 | 2014-09-09 | TERMINADO | DCHOS RELATIVOS VIVIENDA: RECLAMACION DAÑOS DE TERCEROS (NO CUBIERTOS RUIDOS NI DEFECTOS EN LA CONSTRUCCION) | 12 | 0 | 0.00 | 0.00 | EXTRAJUDICIAL | INMUEBLE |
| LS_AS0000000095 | SPF | DJ | SD | 2014-04-24 | 2014-04-28 | 2014-06-27 | TERMINADO | ASISTENCIA PRESENCIAL DE UN ABOGADO EN NOTARIA PARA LA FIRMA DE CONTRATO DE COMPRA O VENTA DE VIVIENDA HABITUAL DE TOMADOR | 0 | 0 | 36.30 | 36.30 | LTDO RED | INMUEBLE |
| LS_AS0000000100 | DUMMY | DJ | SD | 2014-02-20 | 2014-05-23 | 2014-09-11 | TERMINADO | RECLAMACION DE DAÑOS CORPORALES | 500 | 0 | 0.00 | 0.00 | LTDO RED | SEGUROS |
| LS_AS0000000104 | CRSCEP | DJ | RA | 2014-04-25 | 2014-06-09 | 2014-07-22 | TERMINADO | DCHOS RELATIVOS VIVIENDA: RECLAMACION DAÑOS DE TERCEROS (NO CUBIERTOS RUIDOS NI DEFECTOS EN LA CONSTRUCCION) | 12 | 0 | 0.00 | 0.00 | EXTRAJUDICIAL | INMUEBLE |
| LS_AS0000000106 | CRSSP | DJ | RA | 2014-07-07 | 2014-07-25 | 2015-06-02 | TERMINADO | DCHOS RELATIVOS VIVIENDA: RECLAMACION DAÑOS DE TERCEROS (NO CUBIERTOS RUIDOS NI DEFECTOS EN LA CONSTRUCCION) | 12 | 0 | 0.00 | 0.00 | EXTRAJUDICIAL | INMUEBLE |
| LS_AS0000000108 | CROH | DJ | RA | 2014-07-08 | 2014-09-11 | 2017-02-03 | TERMINADO | DEFENSA PENAL | 900 | 0 | 0.00 | 0.00 | LTDO PARTICULAR | PENAL |
| LS_AS0000000109 | CROH | DJ | RA | 2014-03-15 | 2014-09-12 | 2014-09-12 | TERMINADO | DEFENSA PENAL | 300 | 0 | 0.00 | 0.00 | LTDO RED | PENAL |
| LS_AS0000000110 | CROH | DJ | RA | 2014-06-07 | 2014-09-15 | 2014-09-15 | TERMINADO | DEFENSA PENAL | 300 | 0 | 0.00 | 0.00 | LTDO RED | PENAL |
dim(LS)
## [1] 143930 15
El dataset contiene 143.930 observaciones (correspondientes a siniestros cada una) y 15 variables (de las cuales son 8 cualitativas, 4 cuantitativas y 3 fechas).
A continuación, la descripción de cada una de las variables:
siniestro: número identificador del siniestro.
producto: producto al que va a asociado el siniestro y que tiene una serie de coberturas y garantías en las cuales no entramos.
ramo: ramo asegurador al que se asigna el siniestro. DJ (defensa jurídica) o PP (pérdida pecuniaria)
tipo: tipo de seguro en función de la manera en la que se adquiere el riesgo, puede ser adquirido de manera directa a través de la venta directa por la aseguradora (SD - seguro directo) o puede ser un riesgo aceptado si es un riesgo que se adquiere de otra compañía de seguros (RA - reaseguro aceptado).
f_ocurrencia: fecha en la que ocurre el siniestro.
f_declaracion: fecha en la que el siniestro es comunicado a la compañía de seguros y es abierto.
f_cierre: fecha en la que termina el siniestro y es cerrado el expediente.
estado: estatus en el que se encuentra el siniestro (abierto, cerrado, reaperturado…)
cobertura: nombre y tipo de cobertura siniestrable que aplica en el siniestro y por la que la compañía proporciona una cobertura al asegurado.
prov_inicial_cob: provisión con la que se abre el siniestro.
prov_cob: provisión actual que tiene el siniestro en el momento del análisis a 31/12/2022.
pago_total_cob: cuantía total que se ha pagado hasta el momento (31/12/2022) en el siniestro.
coste_total_cob: sumatorio de provision_cobertura_vl + importe_pago_total_cobertura_vl hasta el momento (31/12/2022) en el siniestro.
medio: vía mediante la cual se ha proporcionado la cobertura. En este caso, como se tratan de defensa jurídica, es la vía jurídica por la que se ha procedido en el siniestro (acuerdo extrajudicial, juicio con abogado de la red interna o juicio con abogado particular)
materia: asunto principal que motiva el siniestro y que motiva el expediente.
No hacemos tratamiento de datos faltantes pues nuestro conocimiento del negocio nos dice que es normal que haya datos faltantes en la variable f_cierre ya que puede haber siniestros en estado abierto.
Dividimos el dataset en train, test y validation y posteriormente comprobamos que número de observaciones tiene cada una de las partes respecto al dataset total.
set.seed(108)
numero_total = nrow(LS)
# Porcentajes de train, test y validation
w_train = .5
w_test = .25
w_validation = 1 - (w_train + w_test)
# Todos los índices
indices = seq(1:numero_total)
# Muestreo
indices_train = sample(1:numero_total, numero_total * w_train)
indices_test = sample(indices[-indices_train], numero_total * w_test)
indices_validation = indices[-c(indices_train,indices_test)]
# Agrupamos
LS_train = LS[indices_train,]
LS_test = LS[indices_test,]
LS_validation = LS[indices_validation,]
nrow(LS)
## [1] 143930
nrow(LS_train)
## [1] 71965
nrow(LS_test)
## [1] 35982
nrow(LS_validation)
## [1] 35983
PRODUCTO
merge(setNames(as.data.frame(table(LS_train$producto)), c("producto", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$producto))*100, 2)), c("producto", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| producto | count | prop (%) |
|---|---|---|
| CROH | 34046 | 47.31 |
| CRMM | 13463 | 18.71 |
| CRSPH | 6050 | 8.41 |
| S1PFM | 3029 | 4.21 |
| CRSEP | 2764 | 3.84 |
| CRSSP | 1862 | 2.59 |
| CRGES | 1676 | 2.33 |
| SPFPF | 1356 | 1.88 |
| CRSCEP | 1252 | 1.74 |
| CPPE | 667 | 0.93 |
| CRMMP | 570 | 0.79 |
| SRPF | 561 | 0.78 |
| SBS | 509 | 0.71 |
| CJPL | 419 | 0.58 |
| CRDH | 372 | 0.52 |
| STPF | 344 | 0.48 |
| CRP | 330 | 0.46 |
| CRSPHP | 220 | 0.31 |
| CLDAS | 217 | 0.30 |
| SBSP | 205 | 0.28 |
| SPF | 205 | 0.28 |
| SPFWB | 183 | 0.25 |
| DUMMY | 181 | 0.25 |
| CEJA | 166 | 0.23 |
| ASIS_JUR1 | 125 | 0.17 |
| CAEGC | 99 | 0.14 |
| SRDJ | 95 | 0.13 |
| SCP | 85 | 0.12 |
| CRSSEP | 60 | 0.08 |
| CSME | 55 | 0.08 |
| SPFD | 53 | 0.07 |
| TAMPM | 51 | 0.07 |
| SPFWC | 47 | 0.07 |
| S1PFB | 45 | 0.06 |
| SDJ | 44 | 0.06 |
| S1PFWM | 43 | 0.06 |
| SPFWM | 40 | 0.06 |
| CREH | 38 | 0.05 |
| CRGESC | 38 | 0.05 |
| SACYL | 36 | 0.05 |
| SPC | 34 | 0.05 |
| SBSAU | 33 | 0.05 |
| S1PFWC | 28 | 0.04 |
| CRDH1 | 24 | 0.03 |
| CPRC1000 | 22 | 0.03 |
| SPA | 18 | 0.03 |
| SPFP | 18 | 0.03 |
| CRPN | 16 | 0.02 |
| SDY | 15 | 0.02 |
| STPPM | 15 | 0.02 |
| SBSNE | 14 | 0.02 |
| SIMA | 13 | 0.02 |
| CLDAP | 11 | 0.02 |
| CRPEN | 11 | 0.02 |
| CRPR | 10 | 0.01 |
| CUJP | 10 | 0.01 |
| SPII | 9 | 0.01 |
| S1CFC | 5 | 0.01 |
| CPPM | 4 | 0.01 |
| CROD | 4 | 0.01 |
| CRODAC | 4 | 0.01 |
| SPI | 4 | 0.01 |
| SRASAJ | 4 | 0.01 |
| CRDPC | 3 | 0.00 |
| CRPENA | 3 | 0.00 |
| CSTJ | 3 | 0.00 |
| CRAM | 2 | 0.00 |
| CRASA | 2 | 0.00 |
| CSPVP | 2 | 0.00 |
| SADAD | 2 | 0.00 |
| SCFC | 2 | 0.00 |
| SDK | 2 | 0.00 |
| SRASAC | 2 | 0.00 |
| SRPC | 2 | 0.00 |
| SRPRT1 | 2 | 0.00 |
| ASIMA | 1 | 0.00 |
| CEP | 1 | 0.00 |
| CMMP | 1 | 0.00 |
| CPRC300 | 1 | 0.00 |
| CRASD | 1 | 0.00 |
| CRDJ | 1 | 0.00 |
| CSCP | 1 | 0.00 |
| CSOPAC | 1 | 0.00 |
| SFC | 1 | 0.00 |
| SRASACS | 1 | 0.00 |
| SRASAM | 1 | 0.00 |
RAMO
merge(setNames(as.data.frame(table(LS_train$ramo)), c("ramo", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$ramo))*100, 2)), c("ramo", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "auto")
| ramo | count | prop (%) |
|---|---|---|
| DJ | 70448 | 97.89 |
| PP | 1517 | 2.11 |
TIPO
merge(setNames(as.data.frame(table(LS_train$tipo)), c("tipo", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$tipo))*100, 2)), c("tipo", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "auto")
| tipo | count | prop (%) |
|---|---|---|
| RA | 62757 | 87.2 |
| SD | 9208 | 12.8 |
ESTADO
merge(setNames(as.data.frame(table(LS_train$estado)), c("estado", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$estado))*100, 2)), c("estado", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "auto")
| estado | count | prop (%) |
|---|---|---|
| TERMINADO | 64754 | 89.98 |
| ACTIVO | 6867 | 9.54 |
| REAPERTURA | 284 | 0.39 |
| ANULADO | 60 | 0.08 |
COBERTURA
merge(setNames(as.data.frame(table(LS_train$cobertura)), c("cobertura", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$cobertura))*100, 2)), c("cobertura", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| cobertura | count | prop (%) |
|---|---|---|
| DCHOS RELATIVOS VIVIENDA: RECLAMACION DAÑOS DE TERCEROS (NO CUBIERTOS RUIDOS NI DEFECTOS EN LA CONSTRUCCION) | 29956 | 41.63 |
| RECLAMACION DAÑOS NO CONTRACTUAL CORPORALES | 8679 | 12.06 |
| RECLAMACION DAÑOS NO CONTRACTUAL MATERIALES | 5032 | 6.99 |
| DCHOS RELATIVOS VIVIENDA PROPIETARIO: DEFENSA Y RECLAMACION INTERESES FRENTE A LA COMUNIDAD | 3713 | 5.16 |
| DEFENSA PENAL | 3252 | 4.52 |
| CONTRATOS LABORALES: CONFLICTOS INDIVIDUALES DE TRABAJO (SOLO ANTE LA EMPRESA EMPLEADORA) | 2897 | 4.03 |
| RECLAMACION DAÑOS NO CONTRACTUAL VIA ADMINISTRATIVA | 2636 | 3.66 |
| DEFENSA CIVIL COMO DEMANDADO, INCLUIDO MUTUO ACUERDO (EXCEPTO PROC CONCURSALES Y MEDIDAS PATERNO FILIALES) | 1698 | 2.36 |
| DEFENSA PENAL COMO DENUNCIADO ( EXCEPTO SI ALGUNA VICTIMA MENOR DE EDAD) | 1190 | 1.65 |
| DEFENSA CIVIL Y PENAL | 1013 | 1.41 |
| CONTRATOS DE SERVICIOS | 698 | 0.97 |
| PROTECCION DE PAGOS POR DESEMPLEO INVOLUNTARIO | 653 | 0.91 |
| DCHOS RELATIVOS VIVIENDA: RECLAMACION POR INCUMPLIMIENTO DE LOS CONTRATOS DE REPARACION O MANTENIMIENTO DE LAS INSTALACIONES DE LA VIVIENDA | 637 | 0.89 |
| CONTRATOS DE SUMINISTROS DE TELEFONIA Y SIMILARES | 611 | 0.85 |
| DCHOS RELATIVOS VIVIENDA INQUILINO: CONFLICTOS DERIVADOS DEL CONTRATO DE ALQUILER EXCEPTO DESAHUCIO | 546 | 0.76 |
| DCHOS RELATIVOS VIVIENDA PROPIETARIO: JUICIOS DE DESAHUCIO COMO ARRENDADOR | 462 | 0.64 |
| DCHOS RELATIVOS VIVIENDA PROPIETARIO: SERVIDUMBRES DE PASO, LUCES Y SIMILARES | 437 | 0.61 |
| DCHOS RELATIVOS VIVIENDA: RECLAMACION POR INCUMPLIMIENTO DE CONTRATO DE SERVICIOS U OBRAS PRESTADOS EN LA VIVIENDA A LA PROPIA VIVIENDA , AL ASEGURADO O A SUS BIENES | 380 | 0.53 |
| DCHOS RELATIVOS VIVIENDA INQUILINO: CONFLICTOS DERIVADOS DEL CONTRATO DE ALQUILER | 357 | 0.50 |
| RECLAMACIONES POR INCUMPLIMIENTO DE OBLIGACIONES DE PAGO DE RENTAS O PENSIONES EN CASO DE NULIDAD DE MATRIMONIO, SEPARACION O DIVORCIO | 343 | 0.48 |
| CONTRATOS SOBRE COSAS MUEBLES Y OTROS CONTRATOS DE CONSUMO | 341 | 0.47 |
| RECLAMACION OTROS SEGUROS RELATIVOS A LA VIVIENDA | 328 | 0.46 |
| DEFENSA JUDICIAL DE LOS DERECHOS DEL ASEGURADO EN LITIGIOS DERIVADOS DE COMPRAS COMO CONSUMIDOR | 324 | 0.45 |
| DCHOS RELATIVOS VIVIENDA PROPIETARIO: DEFENSA PENAL COMO MIEMBRO JUNTAS COPROPIETARIOS | 302 | 0.42 |
| DEFENSA Y RECLAMACIONES RELACIONADAS CON OTROS SEGUROS | 296 | 0.41 |
| EN RELACION CON EL SERVICIO DOMESTICO | 291 | 0.40 |
| PROTECCION PAGO POR DESEMPLEO | 274 | 0.38 |
| DEFENSA CIVIL COMO DEMANDADO (EXCEPTO PROC CONCURSALES, SEPARACION, DIVORCIO Y MEDIDAS PATERNO FIL MUTUO ACUERDO) | 270 | 0.38 |
| DEFENSA PENAL EN DELITOS DE ROBO, HURTO, APROPIACION INDEBIDA, INJURIAS, CALUMNIAS, AMENAZAS, INSOLVENCIA PUNIBLE, DENUNCIA FALSA Y SIMULACION DE DELITO | 265 | 0.37 |
| SUBSIDIO PARA CURSO DE SENSIBILIZACION Y REEDUCACION VIAL, ASI COMO LAS TASAS DE LA PRUEBA DE CONOCIMIENTO PARA LA RECUPERACION DEL PERMISO O LICENCIA DE CONDUCCION REINTEGRO MAXIMO DE 500€ | 230 | 0.32 |
| DEFENSA LABORAL (SOLO CONFLICTOS INDIVIDUALES FRENTE A EMPRESA) | 224 | 0.31 |
| DEFENSA SANCIONES ADMINISTRATIVAS: EXPEDIENTE DISCIPLINARIO | 201 | 0.28 |
| DEFENSA EN CASO DE SEPARACION Y/O DIVORCIO | 192 | 0.27 |
| DCHOS RELATIVOS VIVIENDA: RECLAMACIONES A VECINOS POR EMANACIONES DE HUMOS O GASES | 180 | 0.25 |
| DEFENSA JUDICIAL DE LOS DERECHOS DEL ASEGURADO EN LITIGIOS DERIVADOS DE COMPRAS FORMALIZADAS POR INTERNET COMO CONSUMIDOR | 162 | 0.23 |
| RECLAMACION DE DAÑOS EN CASO DE ACCIDENTE DERIVADO DE LA CIRCULACION DE VEHICULOS A MOTOR | 140 | 0.19 |
| DEFENSA LABORAL (COMO DEMANDADO Y EMPLEADOR DE PERSONAL DOMESTICO) | 134 | 0.19 |
| DCHOS RELATIVOS VIVIENDA: DEFENSA RESPONSABILIDAD PENAL COMO RESIDENTE | 108 | 0.15 |
| INCUMPLIMIENTOS DE CONTRATOS SOBRE BIENES MUEBLES SITUADOS EN LA VIVIENDA: AJUAR, ELECTRODOMESTICOS, APARATOS DE IMAGEN, SONIDO Y ELECTRONICOS | 104 | 0.14 |
| DCHOS RELATIVOS VIVIENDA INQUILINO: CONFLICTOS DERIVADOS DEL CONTRATO DE ALQUILER (EXCEPTO FALTA DE PAGO) | 103 | 0.14 |
| DCHOS RELATIVOS VIVIENDA: INCUMPLIMIENTO CONTRATO DE COMPRAVENTA | 102 | 0.14 |
| INFORMES PERICIALES | 101 | 0.14 |
| DEFENSA LABORAL: FRENTE A SEG SOCIAL O MUTUA OBTENCION PREST CONTRIBUTIVAS | 97 | 0.13 |
| DEFENSA DE INTERNET | 94 | 0.13 |
| GASTOS PARA LA RECUPERACION DEL PERMISO DE CONDUCCION POR LA PERDIDA TOTAL DE PUNTOS | 83 | 0.12 |
| RECLAMACION DAÑOS CORPORALES | 83 | 0.12 |
| DEFENSA JUDICIAL EN ASUNTOS RELACIONADOS CON EL LOCAL DE NEGOCIO ASEGURADO | 79 | 0.11 |
| DEFENSA PENAL: COMO DENUNCIANTE (AMENAZAS, COACCIONES DELITOS CONTRA LA DIGNIDAD) | 78 | 0.11 |
| SUBSIDIO POR SUSPENSION TEMPORAL EMPLEO Y SUELDO | 78 | 0.11 |
| GASTOS PARA LA RECUPERACION DEL PERMISO DE CONDUCCION POR LA PERDIDA PARCIAL DE PUNTOS | 77 | 0.11 |
| DCHOS RELATIVOS VIVIENDA: OCUPACION ILEGAL DE LA VIVIENDA | 74 | 0.10 |
| RECLAMACION DE DAÑOS CORPORALES | 73 | 0.10 |
| SEPARACION Y DIVORCIO | 71 | 0.10 |
| DEFENSA JUDICIAL DE LOS DERECHOS DEL TOMADOR EN LITIGIOS DERIVADOS DE COMPRAS COMO CONSUMIDOR | 70 | 0.10 |
| RECLAMACION DE DAÑOS CORPORALES EXTRACONTRACTUALES | 62 | 0.09 |
| IMPUGNACION RESOLUCIONES INCAPACIDAD PERMANENTE | 55 | 0.08 |
| RECLAMACION INCUMPLIMIENTO CONTRATOS DE SERVICIOS (PROF TITULADOS, SER, MEDICOS U OTROS) | 47 | 0.07 |
| DCHOS RELATIVOS VIVENDA: INCUMPLIMIENTO CONTRATOS SUMINISTROS VIVIENDA | 46 | 0.06 |
| PROTECCION PAGO POR INCAPACIDAD LABORAL TRANSITORIA | 46 | 0.06 |
| DCHOS RELATIVOS VIVIENDA: DEFECTO OBRA REFORMA | 45 | 0.06 |
| DEFENSA CIVIL COMO DEMANDADO | 45 | 0.06 |
| DEFENSA PENAL EN CASOS DE CONDUCCION SIN PERMISO, HECHOS CONTRA LA SEGURIDAD VIAL, CONDUCCION TEMERARIA Y CONDUCCION BAJO LA INFLUENCIA DE BEBIDAS ALCOHOLICAS | 42 | 0.06 |
| DEFENSA EN INFRACCIONES ADMINISTRATIVAS RELACIONADAS CON LA VIVIENDA | 36 | 0.05 |
| RECLAMACION INCUMPLIMIENTO CONTRATOS DE COMPRAVENTA COSAS MUEBLES | 36 | 0.05 |
| GESTION EXTRAJUDICIAL Y MEDIANTE PROCEDIMIENTO MONITORIO DE CUOTAS IMPAGADAS | 35 | 0.05 |
| RECLAMACIONES EN RELACION CON LA COMPRA DE VIVIENDA | 34 | 0.05 |
| DERECHO FISCAL | 31 | 0.04 |
| GESTION ADMINISTRATIVA DOMESTICA (ALTA, BAJA EMPLEADAS DE HOGAR) | 29 | 0.04 |
| DCHOS RELATIVOS VIVIENDA: RECLAMACION A INQUILINO ACTOS VANDALICOS | 26 | 0.04 |
| DEFENSA PENAL: COMO DENUNCIANTE (DAÑOS PERSONALES Y MATERIALES) | 26 | 0.04 |
| DEFENSA PENAL HECHOS PRODUCIDOS DESEMPEÑO TRABAJO | 25 | 0.03 |
| ASISTENCIA PRESENCIAL DE UN ABOGADO EN CASO DE DETENCION DEL ASEGURADO POR DELITOS CONTRA LA SEGURIDAD VIAL | 19 | 0.03 |
| DEFENSA COMERCIO ELECTRONICO (INCLUMPLIMIENTO DE CONTRATOS DE COMERCIO, CON FACTURA PAGADA) | 19 | 0.03 |
| DEFENSA EN VIA JUDICIAL DE LOS DERECHOS DEL ASEGURADO EN MATERIA DE CONTRATOS LABORALES POR NULIDAD DE DESPIDOS Y OTRAS MEDIDAS DISCIPLINARIAS DISTINTAS DEL DESPIDO | 19 | 0.03 |
| TRAMITES SUCESORIOS (CERTIFICADOS E INSCRIPCIONES) | 19 | 0.03 |
| DEFENSA PENAL POR HECHOS RELACIONADOS CON LA CIRCULACION DE VEHICULOS A MOTOR, EN CASOS DE COMISION POR EL ASEGURADO DE UN DELITO DE: CONDUCCION BAJO LA INFLUENCIA DE BEBIDAS ALCOHOLICAS… | 18 | 0.03 |
| DECLARACION INCAPAZ ASEGURADO | 15 | 0.02 |
| GASTOS POR LA TASA DEL EXAMEN DEL CURSO DE RECUPERACION DEL PERMISO DE CONDUCCION | 15 | 0.02 |
| PROTECCION DE PAGOS POR INCAPACIDAD LABORAL TRANSITORIA | 15 | 0.02 |
| MEDIACION EN CONFLICTOS EN MATERIA CIVIL Y MERCANTIL | 14 | 0.02 |
| DEFENSA PENAL EN CASOS DE CONDUCCION SIN PERMISO, HECHOS CONTRA LA SEGURIDAD VIAL Y CONDUCCION TEMERARIA | 13 | 0.02 |
| ASISTENCIA PRESENCIAL DE UN ABOGADO EN NOTARIA PARA LA FIRMA DE CONTRATO DE COMPRA O VENTA DE VIVIENDA HABITUAL DE TOMADOR | 12 | 0.02 |
| PERDIDAS PECUNIARIAS DERIVADAS DE DELITOS DE ESTAFA SUFRIDOS POR EL ASEGURADO | 12 | 0.02 |
| RECLAMACION AMISTOSA Y JUDICIAL DE DAÑOS MATERIALES | 12 | 0.02 |
| RECLAMACION DAÑOS Y DEFENSA JURIDICA USO ILEGITIMO DE IDENTIDAD (INTERNET, SANCIONES DE TRAFICO, RECLAMACION DEUDA FRAUDULENTA) | 12 | 0.02 |
| SUBSIDIO MENSUAL EN CASO DE REVOCACION DEL PERMISO DE CONDUCCION POR PERDIDA DE PUNTOS | 12 | 0.02 |
| DEFENSA DE LOS DERECHOS DEL ASEGURADO DE SU TRABAJO POR CUENTA AJENA | 11 | 0.02 |
| DEFENSA JUDICIAL PARA LA RECLAMACION DE DAÑOS Y PERJUICIOS CAUSADOS POR PROVEEDORES | 10 | 0.01 |
| REDACCION DE LA DEMANDA DE CONCILIACION SOBRE LOS ASUNTOS EN LOS QUE EL TOMADOR OSTENTE LA CONDICION DE CONSUMIDOR | 9 | 0.01 |
| DEFENSA LABORAL: CONFLICTOS INDIVIDUALES DE TRABAJO DE ASALARIADOS | 8 | 0.01 |
| REDACCION DE LA DEMANDA DE CONCILIACION SOBRE LOS ASUNTOS EN LOS QUE EL TOMADOR OSTENTE LA CONDICION DE ARRENDATARIO | 8 | 0.01 |
| DECLARACION IRPF (CONFECCION Y PRESENTACION) | 7 | 0.01 |
| DEFENSA COMO DEMANDADO POR OBRAS NO AUTORIZADAS | 7 | 0.01 |
| DEFENSA DE IDENTIDAD (EXTRAVIO DEL DNI, ABONO DE GASTOS LEGALES EN CASO DE OCURRENCIA DE FRAUDE DE IDENTIDAD) | 7 | 0.01 |
| RECLAMACION DE DAÑOS PERSONALES | 7 | 0.01 |
| RECLAMACION POR INCUMPLIMIENTO EN MATERIA DE CALIDADES DE LA VIVIENDA | 7 | 0.01 |
| DEFENSA EN CASO DE USURPACION DE VIVIENDA | 6 | 0.01 |
| DEFENSA FISCAL | 6 | 0.01 |
| DEFENSA PENAL EN DELITOS CONTRA EL TRAFICO Y SEGURIDAD VIAL | 6 | 0.01 |
| DEFENSA TRIBUTARIA EN LA LIQUIDACION DE LA SOCIEDAD DE GANANCIALES | 6 | 0.01 |
| ASISTENCIA PRESENCIAL DE UN ABOGADO EN CASO DE DETENCION DEL TOMADOR POR DELITOS CONTRA LA SEGURIDAD VIAL | 5 | 0.01 |
| DEFENSA EN VIA JUDICIAL DE LOS DERECHOS DEL ASEGURADO EN MATERIA DE CONTRATOS DE SUMINISTROS | 5 | 0.01 |
| DEFENSA Y RECLAMACION DEL CONTRATO DE ARRENDAMIENTO | 5 | 0.01 |
| RECLAMACIONES EN RELACION CON LA COMPRA DE VIVIENDA: CALIDADES | 5 | 0.01 |
| RECLAMACIONES POR REPARACIONES DE VEHICULOS AUTOMOVILES EN TALLERES | 5 | 0.01 |
| ASISTENCIA A JUICIO | 4 | 0.01 |
| ASISTENCIA DETENIDO EN COMISARIA | 4 | 0.01 |
| ASISTENCIA JURIDICA DE URGENCIA ASISTENCIA PRESENCIAL DE UN ABOGADO | 4 | 0.01 |
| DEFENSA DE IDENTIDAD | 4 | 0.01 |
| DEFENSA EXTRAJUDICIAL EN MATERIA ADMINISTRATIVA | 4 | 0.01 |
| DEFENSA Y RECLAMACION ADMINISTRATIVA Y JUDICIAL POR ACTAS DE INSPECCION O LIQUIDACION DE LA SEGURIDAD SOCIAL | 4 | 0.01 |
| DEFENSA Y RECLAMACION EN DESAHUCIO POR FALTA DE PAGO Y RESOLUCION DEL CONTRATO POR OBRAS NO CONSENTIDAS | 4 | 0.01 |
| RECLAMACION POR REPARACION DEFECTUOSO DEL VEHICULO | 4 | 0.01 |
| DEFENSA EN VIA JUDICIAL DE LOS DERECHOS DEL ASEGURADO EN MATERIA DE RECLAMACIONES DE CONSUMIDORES | 3 | 0.00 |
| DEFENSA PENAL EN CASOS DE CONDUCCION BAJO LA INFLUENCIA DE BEBIDAS ALCOHOLICAS, CONDUCCION TEMERARIA Y CONDUCCION SIN PERMISO | 3 | 0.00 |
| DEFENSA RESPONSABILIDAD PENAL COMO MIEMBRO JUNTA DE PROPIETARIOS | 3 | 0.00 |
| DEFENSA TRIBUTARIA | 3 | 0.00 |
| ESCUDO ONLINE | 3 | 0.00 |
| INDEMNIZACION POR IMPAGO DE RENTAS DE ALQUILER | 3 | 0.00 |
| INTERVENCION ACTO DE FIRMA NOTARIAL | 3 | 0.00 |
| PERDIDAS PECUNIARIAS DERIVADAS DE DELITOS DE ESTAFA SUFRIDOS POR EL TOMADOR | 3 | 0.00 |
| PROTECCION PAGO POR HOSPITALIZACION ACCIDENTE (30 DIAS CONSECUTIVOS) | 3 | 0.00 |
| RECLAMACION AMISTOSA Y JUDICIAL DE LESIONES Y MUERTE | 3 | 0.00 |
| RECLAMACION DAÑOS Y PERJUICIOS POR DEMANDAS INFUNDADAS | 3 | 0.00 |
| ABOGADO DE CABECERA | 2 | 0.00 |
| ASISTENCIA DE REMOLQUE POR INMOVILIZACION DEL VEHICULO EN SUPUESTOS DE ALCOHOLEMIA | 2 | 0.00 |
| CONTRATOS DE SEGUROS | 2 | 0.00 |
| DEFENSA CIVIL: COMO DEMANDANTE (DAÑOS PERSONALES Y MATERIALES) | 2 | 0.00 |
| DEFENSA DE LA RESPONSABILIDAD PENAL DEL ADMINISTRADOR SOCIETARIO O REPRESENTANTE LEGAL DE LA PERSONA JURIDICA ASEGURADA | 2 | 0.00 |
| DEFENSA EN VIA PENAL POR DELITO CONTRA LA HACIENDA PUBLICA | 2 | 0.00 |
| DEFENSA JUDICIAL POR PERJUICIOS ECONOMICOS EN EL NEGOCIO DEL ASEGURADO DERIVADOS DE OBRAS REALIZADAS A INSTANCIA DEL PROPIETARIO EN EL LOCAL DONDE ESTE INSTALADA LA ACTIVIDAD | 2 | 0.00 |
| DEFENSA PENAL POR DELITOS CONTRA LOS DERECHOS DE LOS TRABAJADORES | 2 | 0.00 |
| DEFENSA PENALY CIVIL SUPLEMENTARIA | 2 | 0.00 |
| DEFENSA Y RECLAMACION COMPRAS CONSUMIDOR | 2 | 0.00 |
| IMPUGNACION DEL VALOR CATASTRAL DE LA VIVIENDA ASEGURADA | 2 | 0.00 |
| PERDIDA PECUNIARIA DERIVADA DELITO DE ESTAFA (CON SENTENCIA CONDENATORIA NO FIRME) | 2 | 0.00 |
| RECLAMACIONES EN RELACION CON LA COMPRA Y USURPACION DE LA VIVIENDA: RETRASO EN ENTREGA Y DIFERENCIA DE CABIDA | 2 | 0.00 |
| RECLAMACIONES RELATIVAS A PENSIONES FRENTE A INSS | 2 | 0.00 |
| REEMBOLSO GASTOS SEPARACION Y DIVORCIO TRAS SENTENCIA/RESOL JUD FIRME | 2 | 0.00 |
| ASISTENCIA PRESENCIAL DE UN ABOGADO EN CASO DE DETENCION POR DELITO CONTRA LA SEGURIDAD VIAL | 1 | 0.00 |
| AYUDA PAGO PENSION ALIMENTOS | 1 | 0.00 |
| COMPRA FRAUDULENTA | 1 | 0.00 |
| COMPRA PROTEGIDA CONTRA ROBO/HURTO | 1 | 0.00 |
| DEFENSA (VARIOS) | 1 | 0.00 |
| DEFENSA CIVIL: COMO DEMANDADO ACTOS RELACIONADOS CON SU ACTIVIDAD (EXCEPTO POR RC) | 1 | 0.00 |
| DEFENSA COMO DEMANDANTE EN CASO DE INCUMPLIMIENTO DE CONTRATOS DE SERVICIOS | 1 | 0.00 |
| DEFENSA EN INFRACCIONES ADMINISTRATIVAS | 1 | 0.00 |
| DEFENSA EN VIA JUDICIAL DE LOS DERECHOS DE LA ENTIDAD ASEGURADA EN MATERIA DE RECLAMACIONES DE CONSUMIDORES | 1 | 0.00 |
| DEFENSA JUDICIAL EN MATERIA DE CONTRATOS DE SERVICIOS | 1 | 0.00 |
| DEFENSA JUDICIAL PARA LA RECLAMACION DE DAÑOS CORPPRALES CAUSADOS POR AGRESIONES A LOS EMPLEADOS | 1 | 0.00 |
| DEFENSA JURIDICA EN EL EXTRANJERO Y DEFENSA JURIDICA DEL ESTUDIANTE | 1 | 0.00 |
| DEFENSA PENAL DEL ASEGURADO POR DELITO FISCAL | 1 | 0.00 |
| DEFENSA PENAL EN CASO DE CONDUCCION BAJO LA INFLUENCIA DE BEBIDAS ALCOHOLICAS | 1 | 0.00 |
| DERECHOS RELATIVOS AL LOCAL DE NEGOCIO: CONFLICTOS DERIVADOS DEL ALQUILER (EXCEPTO POR FALTA DE PAGO DE LA RENTA) | 1 | 0.00 |
| DERECHOS RELATIVOS AL LOCAL DE NEGOCIO: RECLAMACION DAÑOS DE ORIGEN EXTRACONTRACTUAL | 1 | 0.00 |
| DJ-PERITO DAÑOS MATERIALES | 1 | 0.00 |
| DJ-RECLAMACION DAÑOS NO CONTRACTUAL CORPORALES | 1 | 0.00 |
| INDEMNIZACION POR DAÑOS PRODUCIDOS POR ACTOS VANDALICOS | 1 | 0.00 |
| RECLAMACION DAÑOS CORPORALES HECHOS PRODUCIDOS DESEMPEÑO TRABAJO | 1 | 0.00 |
| RECLAMACION DAÑOS INTERNET POR AMENAZAS, ACOSO, CALUMNIAS, ETC | 1 | 0.00 |
| RECLAMACION MENOR ACOSO ESCOLAR | 1 | 0.00 |
| RECLAMACION OTROS SEGUROS TOMADOR | 1 | 0.00 |
| RECLAMACION POR DIFERENCIA DE CABIDA DE LA VIVIENDA | 1 | 0.00 |
| RECLAMACION POR RETRASO DE ENTREGA DE LA VIVIENDA | 1 | 0.00 |
| RECLAMACIONES PRESTACIONES SOCIALES FRENTE A INSS | 1 | 0.00 |
| RECLAMACON DAÑOS Y PERJUICIOS POR DEMANDAS INFUNDADAS | 1 | 0.00 |
| SUSTRACCION ILEGITIMA | 1 | 0.00 |
| SUSTRACCION ILEGITIMA: RETIRADA DE EFECTIVO EN CAJERO | 1 | 0.00 |
MEDIO
merge(setNames(as.data.frame(table(LS_train$medio)), c("medio", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$medio))*100, 2)), c("medio", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "auto")
| medio | count | prop (%) |
|---|---|---|
| EXTRAJUDICIAL | 52225 | 72.57 |
| LTDO RED | 10510 | 14.60 |
| LTDO PARTICULAR | 9230 | 12.83 |
MATERIA
merge(setNames(as.data.frame(table(LS_train$materia)), c("materia", "count")),
setNames(as.data.frame(round(prop.table(table(LS_train$materia))*100, 2)), c("materia", "prop (%)"))
) %>%
arrange(desc(count)) %>%
kbl() %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| materia | count | prop (%) |
|---|---|---|
| INMUEBLE | 36085 | 50.14 |
| SEGUROS | 9438 | 13.11 |
| PENAL | 7507 | 10.43 |
| CIVIL | 6476 | 9.00 |
| LABORAL | 3778 | 5.25 |
| CONSUMO | 3352 | 4.66 |
| ADMINISTRATIVO | 3075 | 4.27 |
| DEF.JCA.GES | 1673 | 2.32 |
| MULTAS | 401 | 0.56 |
| INTERNET | 95 | 0.13 |
| FISCAL | 85 | 0.12 |
# PLOT PRODUCTO
# Paso 1: Sumarizar y ordenar los datos
LS_train_primeros15 <- LS_train %>%
group_by(producto) %>%
summarize(count = n()) %>%
arrange(-count) %>%
slice(1:15) # Paso 2: Limitar a los 15 productos más frecuentes
# Paso 2: Gráfico
plot_producto <- ggplot(LS_train_primeros15, aes(x = reorder(producto, count), y = count)) +
geom_bar(stat = "identity", fill = "#009494") +
coord_flip() +
labs(x = "producto", y = "Nº producto", title = "Producto") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT RAMO
plot_ramo <- ggplot(LS_train, aes(ramo)) +
geom_bar(fill = "#009494") +
labs(x = "ramo", y = "Nº ramo", title = "Ramo") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT TIPO
plot_tipo <- ggplot(LS_train, aes(tipo)) +
geom_bar(fill = "#009494") +
labs(x = "tipo", y = "Nº tipo", title = "Tipo") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT ESTADO
# Paso 1: Calcular el número de ocurrencias para cada 'estado'
estado_counts <- LS_train %>%
group_by(estado) %>%
summarise(n = n()) %>%
arrange(-n)
# Paso 2: Usar esa información para reordenar la variable 'estado' en el dataframe
LS_train$estado <- factor(LS_train$estado, levels = estado_counts$estado)
# Paso 3: Crear el gráfico
plot_estado <- ggplot(LS_train, aes(estado)) +
geom_bar(fill = "#009494") +
labs(x = "estado", y = "Nº estado", title = "Estado") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 15, hjust = 1))
# PLOT MEDIO
# Paso 1: Calcular el número de ocurrencias para cada 'medio'
medio_counts <- LS_train %>%
group_by(medio) %>%
summarise(n = n()) %>%
arrange(-n)
# Paso 2: Usar esa información para reordenar la variable 'medio' en el dataframe
LS_train$medio <- factor(LS_train$medio, levels = medio_counts$medio)
# Paso 3: Crear el gráfico
plot_medio <- ggplot(LS_train, aes(medio)) +
geom_bar(fill = "#009494") +
labs(x = "medio", y = "Nº medio", title = "Medio") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 15, hjust = 1))
# PLOT MATERIA
# Paso 1: Calcular el número de ocurrencias para cada 'materia'
materia_counts <- LS_train %>%
group_by(materia) %>%
summarise(n = n()) %>%
arrange(n)
# Paso 2: Usar esa información para reordenar la variable 'materia' en el dataframe
LS_train$materia <- factor(LS_train$materia, levels = materia_counts$materia)
# Paso 3: Crear el gráfico
plot_materia <- ggplot(LS_train, aes(x = materia)) +
geom_bar(fill = "#009494") +
coord_flip() +
labs(x = "materia", y = "Nº materia", title = "Materia") +
theme(plot.title = element_text(hjust = 0.5))
grid.arrange(plot_producto,
plot_materia,
ncol=2)
Para la variable producto sólo representamos los 15 primeros ya que a partir de ahí son muchos los productos pero pocos los siniestros por producto. Se observa como un producto destaca ampliamente sobre el resto, en torno al 47% de los siniestros de esta compañía son del producto CROH.
En cuanto a la materia, destaca ampliamente todo lo que tiene que ver con inmuebles, el 50% de los siniestros.
grid.arrange(plot_ramo,
plot_tipo,
ncol=2)
Casi el 98% de los siniestros son del ramo de Defensa Jurídica, ramo CORE de LS Insurance y tan sólo el 2% de Pérdidas Pecuniarias.
Algo parecido sudece con el tipo de seguro ya que el 87% son de RA (reaseguro aceptado) y sólo un 13% aproximadamente de SD (seguro Directo). Esto nos indica que la mayor parte de la siniestralidad de la compañía procede de la aceptación de riesgo de otras compañías aseguradoras y no del riesgo que vende LS de manera directa.
grid.arrange(plot_estado,
plot_medio,
ncol=2)
El 90% de los siniestros están terminados y a priori no se van a producir cambios en ellos por lo que los datos finales de estos contituyen de manera bastante fiel la realidad de la siniestralidad de la compañía y nos facilitará en gran medida la tarea de clasificar y predecir costes de siniestros.
Por otro lado es relevante apreciar que en al rededor de un 72% de los siniestros terminan siendo gestionados de manera extrajudicial, un 15% en juicios llevados por letrados de la red propia de LS Insurance y un 13% acaban en manos de abogados externos que comunmente provocan un incremento en el coste del siniestro ya que no son llevados por personal interno.
*No se realiza gráfico de la variable cobertura por cuestión estética debido a la gran cantidad de coberturas existentes, casi 200 distintas, y porque no tiene mucho sentido ya que entre ellas las diferencias son excasas
# Extraer el año y convertirlo en una variable categórica
LS_train <- LS_train %>%
mutate(year_ocurrencia = as.factor(lubridate::year(f_ocurrencia)),
year_declaracion = as.factor(lubridate::year(f_declaracion)),
year_cierre = as.factor(lubridate::year(f_cierre)))
FECHA OCURRENCIA
tabla_ocurrencia <- LS_train %>%
group_by(year_ocurrencia) %>%
summarise(count = n()) %>%
mutate(prop = round((count / sum(count)) * 100, 2)) %>%
arrange(desc(count))
tabla_ocurrencia %>%
kbl(col.names = c("year", "count", "prop (%)")) %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| year | count | prop (%) |
|---|---|---|
| 2021 | 11336 | 15.75 |
| 2022 | 10424 | 14.48 |
| 2020 | 9786 | 13.60 |
| 2019 | 8786 | 12.21 |
| 2018 | 8213 | 11.41 |
| 2017 | 6611 | 9.19 |
| 2016 | 6466 | 8.98 |
| 2015 | 5625 | 7.82 |
| 2014 | 4718 | 6.56 |
# PLOT AÑO OCURRENCIA
plot_year_ocurrencia <- ggplot(LS_train, aes(x = year_ocurrencia)) +
geom_line(stat = 'count', aes(group = 1), color = "#009494") +
labs(x = "Año de ocurrencia", y = "Nº de siniestros", title = "Siniestros por año de ocurrencia") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
FECHA DECLARACIÓN
tabla_declaracion <- LS_train %>%
group_by(year_declaracion) %>%
summarise(count = n()) %>%
mutate(prop = round((count / sum(count)) * 100, 2)) %>%
arrange(desc(count))
tabla_declaracion %>%
kbl(col.names = c("year", "count", "prop (%)")) %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| year | count | prop (%) |
|---|---|---|
| 2022 | 12422 | 17.26 |
| 2021 | 11910 | 16.55 |
| 2020 | 9444 | 13.12 |
| 2019 | 8743 | 12.15 |
| 2018 | 7935 | 11.03 |
| 2017 | 6425 | 8.93 |
| 2016 | 6157 | 8.56 |
| 2015 | 5307 | 7.37 |
| 2014 | 3622 | 5.03 |
# PLOT AÑO DECLARACIÓN
plot_year_declaracion <- ggplot(LS_train, aes(x = year_declaracion)) +
geom_line(stat = 'count', aes(group = 1), color = "#009494") +
labs(x = "Año de declaración", y = "Nº de siniestros", title = "Siniestros por año de declaración") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
FECHA CIERRE
tabla_cierre <- LS_train %>%
group_by(year_cierre) %>%
summarise(count = n()) %>%
mutate(prop = round((count / sum(count)) * 100, 2)) %>%
arrange(desc(count))
tabla_cierre %>%
kbl(col.names = c("year", "count", "prop (%)")) %>%
kable_material(c("striped", "hover")) %>%
scroll_box(width = "100%", height = "350px")
| year | count | prop (%) |
|---|---|---|
| 2022 | 11905 | 16.54 |
| 2021 | 11123 | 15.46 |
| 2019 | 9101 | 12.65 |
| 2020 | 8383 | 11.65 |
| NA | 7151 | 9.94 |
| 2018 | 6885 | 9.57 |
| 2017 | 6139 | 8.53 |
| 2016 | 5234 | 7.27 |
| 2015 | 3921 | 5.45 |
| 2014 | 2123 | 2.95 |
# PLOT AÑO CIERRE
plot_year_cierre <- ggplot(LS_train, aes(x = year_cierre)) +
geom_line(stat = 'count', aes(group = 1), color = "#009494") +
labs(x = "Año de cierre", y = "Nº de siniestros", title = "Siniestros por año de cierre") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
# GRÁFICOS JUNTOS POR AÑO
# Primero hay que modificar el dataframe para que las fechas estén en una sola columna y tener otra columna que identifique el tipo de fecha
LS_train_long <- LS_train %>%
select(siniestro, year_ocurrencia, year_declaracion, year_cierre) %>%
gather(key = "Tipo de Fecha", value = "Año", -siniestro)
plot_fechas_año <- ggplot(LS_train_long, aes(x = Año, group = `Tipo de Fecha`)) +
geom_line(stat = 'count', aes(color = `Tipo de Fecha`)) +
labs(x = "Año", y = "Nº de siniestros", title = "Siniestros por año según tipo de fecha") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
scale_color_manual(values = c("year_ocurrencia" = "blue", "year_declaracion" = "green", "year_cierre" = "red"),
name = "Tipo de Fecha")
print(plot_fechas_año)
Podemos observar la tendencia de que año tras año el número de siniestros que ocurren y son declaran por parte de los asegurados es creciente y con una pendiente bastante acentuada.
Esto puede ser por varios motivos pero uno de los principales en este negocio es el crecimiento de la cartera y la asunción de nuevos riesgo con el correspondiente crecimiento de las primas devengadas anuales. Este hecho no lo podemos comprobar ya que el dataset carece de datos relativos a primas, no obstante, nuestro conocimiento del negocio nos hace pensar que es así.
Importante a tener en cuenta es que los crecimientos de cartera y en número de siniestros no siempre son proporcionales, no todas las carteras (productos) tienen los mismo comportamientos y en el estudio de la rentabilidad de las mismas hay que tener en cuenta la rentabilidad o el ratio de siniestralidad de las mismas.
# PLOT MES OCURRENCIA
LS_train$mes_ocurrencia <- lubridate::month(LS_train$f_ocurrencia, label = TRUE)
plot_mes_ocurrencia <- ggplot(LS_train, aes(mes_ocurrencia)) +
geom_bar(fill = "#009494") +
labs(x = "Mes de ocurrencia", y = "Nº de siniestros", title = "Distribución de siniestros ocurridos por mes") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT MES DECLARACIÓN
LS_train$mes_declaracion <- lubridate::month(LS_train$f_declaracion, label = TRUE)
plot_mes_declaracion <- ggplot(LS_train, aes(mes_declaracion)) +
geom_bar(fill = "#009494") +
labs(x = "Mes de declaración", y = "Nº de siniestros", title = "Distribución de siniestros declarados por mes") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT MES CIERRE
LS_train$mes_cierre <- lubridate::month(LS_train$f_cierre, label = TRUE)
plot_mes_cierre <- ggplot(LS_train, aes(mes_cierre)) +
geom_bar(fill = "#009494") +
labs(x = "Mes de cierre", y = "Nº de siniestros", title = "Distribución de siniestros cerrados por mes") +
theme(plot.title = element_text(hjust = 0.5))
plot_mes_ocurrencia
plot_mes_declaracion
plot_mes_cierre
Respecto al número de siniestros ocurridos por mes hay una distribución más o menos homogénea pero se aprecia que hay menor número de siniestros en los meses donde hay mayores festividades, abril y diciembre, así como agosto por el periodo vacacional de verano.
Esto se acentúa en los momentos de declarar siniestros por parte de los asegurados que normalmente esperan unos días en comunicarlos en caso de encontrarse en periodos estivales. Y pasa lo mismo en lo que respecta al cierre de siniestros por parte de los tramitadores de LS Insurance.
Intuímos un cierto patrón; los meses sin fiestas sube el número de siniestros ocurridos, declarados y cerrados mientras que por el contrario los meses con fiestas este número de siniestros baja.
LS_train$dias_para_declarar <- as.numeric(difftime(LS_train$f_declaracion, LS_train$f_ocurrencia, units = "days"))
LS_train$dias_para_cerrar <- as.numeric(difftime(LS_train$f_cierre, LS_train$f_declaracion, units = "days"))
# Histograma con línea de densidad para días para declarar
plot_dias_para_declarar <- ggplot(LS_train, aes(x = dias_para_declarar)) +
geom_histogram(aes(y = ..density..), fill = "#009494", bins = 50, alpha = 0.7) +
geom_density(color = "green", size = 1.2) +
labs(x = "Días para declarar", y = "Densidad", title = "Distribución de días para declarar") +
theme(plot.title = element_text(hjust = 0.5))
# Histograma con línea de densidad para días para cerrar
plot_dias_para_cerrar <- ggplot(LS_train, aes(x = dias_para_cerrar)) +
geom_histogram(aes(y = ..density..), fill = "#009494", bins = 50, alpha = 0.7) +
geom_density(color = "red", size = 1.2) +
labs(x = "Días para cerrar", y = "Densidad", title = "Distribución de días para cerrar") +
theme(plot.title = element_text(hjust = 0.5))
# Para visualizar los gráficos, simplemente ejecuta sus nombres:
grid.arrange(plot_dias_para_declarar,
plot_dias_para_cerrar,
ncol=2)
# Porcentaje de siniestros declarados antes de 90 días
porcentaje_declara_antes_90 <- mean(LS_train$dias_para_declarar < 90) * 100
porcentaje_declara_antes_365 <- mean(LS_train$dias_para_declarar < 365) * 100
# Porcentaje de siniestros cerrados antes de 90 días (excluyendo los NA)
porcentaje_cierra_antes_90 <- mean(LS_train$dias_para_cerrar < 90, na.rm = TRUE) * 100
porcentaje_cierra_antes_365 <- mean(LS_train$dias_para_cerrar < 365, na.rm = TRUE) * 100
cat(paste0("% de siniestros declarados antes de 90 días: ", round(porcentaje_declara_antes_90, 2), "%\n"))
## % de siniestros declarados antes de 90 días: 77.37%
cat(paste0("% de siniestros declarados antes de 365 días: ", round(porcentaje_declara_antes_365, 2), "%\n"))
## % de siniestros declarados antes de 365 días: 94.82%
cat(paste0("% de siniestros cerrados antes de 90 días: ", round(porcentaje_cierra_antes_90, 2), "%\n"))
## % de siniestros cerrados antes de 90 días: 52.08%
cat(paste0("% de siniestros cerrados antes de 365 días: ", round(porcentaje_cierra_antes_365, 2), "%\n"))
## % de siniestros cerrados antes de 365 días: 84.75%
Aunque el 77% de los siniestros se declara en los primeros 3 meses, exite un alto porcentaje de que el asegurado se demore en la comunicación de los mismos llegando a veces a tardar más de 1 año, lo cual es bastante malo para el negocio ya que afecta negativamente incrementando las reservas de la compañía en lo que se conoce como provisión de siniestros pendinetes de declaración (PSPD/IBNR), es decir reservar un dinero para siniestro que no están comunicados pero que la compañía tiene que preveer que se comunicarán y estimar el coste de los mismos.
Con el segundo gráfico pretendía demostrar que este tipo de siniestros son de cola larga superando en un alto porcentaje el año en las gestiones de tramitación. Esto se debe principalmente al ramo que comercializa LS Insurance ya que al tratarse de defensa y asesoramiento jurídico se demora bastante los pacto extrajudiciales por no hablar de los que acaban en tela de juicio que todavía se demoran más.
# PLOT HEATMAP MES OCURRENCIA
ocurrencia_counts <- LS_train %>%
group_by(year = year(f_ocurrencia), month = month(f_ocurrencia, label = TRUE)) %>%
summarise(count = n())
plot_heatmap_ocurrencia <- ggplot(ocurrencia_counts, aes(y = month, x = factor(year), fill = count)) +
geom_tile() +
labs(title = "Siniestros por Fecha de Ocurrencia", y = "Mes", x = "Año") +
scale_fill_gradient(low = "white", high = "red") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 35, hjust = 1))
# PLOT HEATMAP MES DECLARACIÓN
declaración_counts <- LS_train %>%
group_by(year = year(f_declaracion), month = month(f_declaracion, label = TRUE)) %>%
summarise(count = n())
plot_heatmap_declaración <- ggplot(declaración_counts, aes(y = month, x = factor(year), fill = count)) +
geom_tile() +
labs(title = "Siniestros por Fecha de Declaración", y = "Mes", x = "Año") +
scale_fill_gradient(low = "white", high = "red") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 35, hjust = 1))
# PLOT HEATMAP MES CIERRE
cierre_counts <- LS_train %>%
group_by(year = year(f_cierre), month = month(f_cierre, label = TRUE)) %>%
summarise(count = n())
plot_heatmap_cierre <- ggplot(cierre_counts, aes(y = month, x = factor(year), fill = count)) +
geom_tile() +
labs(title = "Siniestros por Fecha de Cierre", y = "Mes", x = "Año") +
scale_fill_gradient(low = "white", high = "red") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 35, hjust = 1))
grid.arrange(plot_heatmap_ocurrencia,
plot_heatmap_declaración,
ncol=2)
Los heatmaps anteriores continúan demostrando como conforme han ido pasando los años hay un creciente número de siniestros ocurridos y comunicados así como la confirmación del patrón que mencionábamos con anterioridad sobre las diferencias entre meses con festividades y meses sin ellas.
*No se realiza gráfico heatmap de la variable f_cierre porque su visualización no aporta gran información sobre los años y meses que más siniestros se cierran ya que hay un alto porcentaje de siniestros que continúan abiertos.
PROVISIÓN INICIAL COBERTURA
# Estadísticas descriptivas para prov_inicial_cob
stats_prov_inicial <- LS_train %>%
summarize(
Minimo = round(min(prov_inicial_cob, na.rm = TRUE), 2),
Maximo = round(max(prov_inicial_cob, na.rm = TRUE), 2),
Mediana = round(median(prov_inicial_cob, na.rm = TRUE), 2),
Media = round(mean(prov_inicial_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(prov_inicial_cob, na.rm = TRUE), 2),
Varianza = round(var(prov_inicial_cob, na.rm = TRUE), 2),
Q1 = round(quantile(prov_inicial_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(prov_inicial_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor")
# Estadísticas descriptivas para prov_inicial_cob excluyendo 0.00
stats_prov_inicial_sin_ceros <- LS_train %>%
filter(prov_inicial_cob != 0.00) %>%
summarize(
Minimo = round(min(prov_inicial_cob, na.rm = TRUE), 2),
Maximo = round(max(prov_inicial_cob, na.rm = TRUE), 2),
Mediana = round(median(prov_inicial_cob, na.rm = TRUE), 2),
Media = round(mean(prov_inicial_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(prov_inicial_cob, na.rm = TRUE), 2),
Varianza = round(var(prov_inicial_cob, na.rm = TRUE), 2),
Q1 = round(quantile(prov_inicial_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(prov_inicial_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor_sin_ceros")
# Agregamos la moda como una fila adicional con 0.00 y sin 0.00
mode_value <- as.numeric(names(sort(table(LS_train$prov_inicial_cob), decreasing = TRUE)[1]))
stats_prov_inicial <- rbind(stats_prov_inicial, data.frame(Estadístico = "Moda", Valor = round(mode_value, 2)))
mode_value_sin_ceros <- as.numeric(names(sort(table(filter(LS_train, prov_inicial_cob != 0.00)$prov_inicial_cob), decreasing = TRUE)[1]))
stats_prov_inicial_sin_ceros <- rbind(stats_prov_inicial_sin_ceros, data.frame(Estadístico = "Moda", Valor_sin_ceros = round(mode_value_sin_ceros, 2)))
# Fusionamos las dos tablas
stats_prov_inicial <- left_join(stats_prov_inicial, stats_prov_inicial_sin_ceros, by = "Estadístico")
# Convertir la tabla a kbl
tabla_prov_inicial <- kbl(stats_prov_inicial, align = c("c", "c", "c"), col.names = c("Estadístico", "Valor", "Valor sin 0.00")) %>%
kable_material()
tabla_prov_inicial
| Estadístico | Valor | Valor sin 0.00 |
|---|---|---|
| Minimo | 0.00 | 1.12 |
| Maximo | 5000.00 | 5000.00 |
| Mediana | 38.00 | 38.00 |
| Media | 135.88 | 136.33 |
| Desviacion_Estandar | 266.36 | 266.69 |
| Varianza | 70949.53 | 71124.95 |
| Q1 | 12.00 | 12.00 |
| Q3 | 85.00 | 85.00 |
| Rango | 5000.00 | 4998.88 |
| Rango_Intercuartilico | 73.00 | 73.00 |
| Moda | 12.00 | 12.00 |
# PLOT HISTOGRAMA PROVISIÓN INICIAL COBERTURA
plot_hist_dens_prov_inicial <- ggplot(LS_train, aes(x=prov_inicial_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. prov_inicial_cob", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PROVISIÓN INICIAL COBERTURA
plot_boxplot_prov_inicial <- ggplot(LS_train, aes(y=prov_inicial_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot prov_inicial_cob") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PROVISIÓN INICIAL COBERTURA
plot_geomplot_prov_inicial <- ggplot(LS_train, aes(x=seq_along(prov_inicial_cob), y=prov_inicial_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot prov_inicial_cob", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PROVISIÓN INICIAL COBERTURA
plot_qqplot_prov_inicial <- ggplot(LS_train, aes(sample=prov_inicial_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train$prov_inicial_cob, na.rm=TRUE), sd=sd(LS_train$prov_inicial_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot prov_inicial_cob") +
theme(plot.title = element_text(hjust = 0.5))
# Filtrar el dataset para excluir los valores de 0.00
LS_train_filtered_0.00 <- LS_train %>% filter(prov_inicial_cob != 0.00)
# PLOT HISTOGRAMA PROVISIÓN INICIAL COBERTURA SIN 0.00
plot_hist_dens_prov_inicial_filtered_0.00 <- ggplot(LS_train_filtered_0.00, aes(x=prov_inicial_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. prov_inicial_cob <> 0.00", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PROVISIÓN INICIAL COBERTURA SIN 0.00
plot_boxplot_prov_inicial_filtered_0.00 <- ggplot(LS_train_filtered_0.00, aes(y=prov_inicial_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot prov_inicial_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PROVISIÓN INICIAL COBERTURA SIN 0.00
plot_geomplot_prov_inicial_filtered_0.00 <- ggplot(LS_train_filtered_0.00, aes(x=seq_along(prov_inicial_cob), y=prov_inicial_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot prov_inicial_cob <> 0.00", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PROVISIÓN INICIAL COBERTURA SIN 0.00
plot_qqplot_prov_inicial_filtered_0.00 <- ggplot(LS_train_filtered_0.00, aes(sample=prov_inicial_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train_filtered_0.00$prov_inicial_cob, na.rm=TRUE), sd=sd(LS_train_filtered_0.00$prov_inicial_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot prov_inicial_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
grid.arrange(plot_hist_dens_prov_inicial,
plot_hist_dens_prov_inicial_filtered_0.00,
ncol=2)
grid.arrange(plot_boxplot_prov_inicial,
plot_boxplot_prov_inicial_filtered_0.00,
ncol=2)
grid.arrange(plot_geomplot_prov_inicial,
plot_geomplot_prov_inicial_filtered_0.00,
ncol=2)
grid.arrange(plot_qqplot_prov_inicial,
plot_qqplot_prov_inicial_filtered_0.00,
ncol=2)
PROVISIÓN COBERTURA
# Estadísticas descriptivas para prov_cob
stats_prov_cob <- LS_train %>%
summarize(
Minimo = round(min(prov_cob, na.rm = TRUE), 2),
Maximo = round(max(prov_cob, na.rm = TRUE), 2),
Mediana = round(median(prov_cob, na.rm = TRUE), 2),
Media = round(mean(prov_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(prov_cob, na.rm = TRUE), 2),
Varianza = round(var(prov_cob, na.rm = TRUE), 2),
Q1 = round(quantile(prov_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(prov_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor")
# Estadísticas descriptivas para prov_cob excluyendo 0.00
stats_prov_cob_sin_ceros <- LS_train %>%
filter(prov_cob != 0.00) %>%
summarize(
Minimo = round(min(prov_cob, na.rm = TRUE), 2),
Maximo = round(max(prov_cob, na.rm = TRUE), 2),
Mediana = round(median(prov_cob, na.rm = TRUE), 2),
Media = round(mean(prov_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(prov_cob, na.rm = TRUE), 2),
Varianza = round(var(prov_cob, na.rm = TRUE), 2),
Q1 = round(quantile(prov_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(prov_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor_sin_ceros")
# Agregamos la moda como una fila adicional con 0.00 y sin 0.00
mode_value_prov_cob <- as.numeric(names(sort(table(LS_train$prov_cob), decreasing = TRUE)[1]))
stats_prov_cob <- rbind(stats_prov_cob, data.frame(Estadístico = "Moda", Valor = round(mode_value_prov_cob, 2)))
mode_value_prov_cob_sin_ceros <- as.numeric(names(sort(table(filter(LS_train, prov_cob != 0.00)$prov_cob), decreasing = TRUE)[1]))
stats_prov_cob_sin_ceros <- rbind(stats_prov_cob_sin_ceros, data.frame(Estadístico = "Moda", Valor_sin_ceros = round(mode_value_prov_cob_sin_ceros, 2)))
# Fusionamos las dos tablas
stats_prov_cob <- left_join(stats_prov_cob, stats_prov_cob_sin_ceros, by = "Estadístico")
# Convertir la tabla a kbl
tabla_prov_cob <- kbl(stats_prov_cob, align = c("c", "c", "c"), col.names = c("Estadístico", "Valor", "Valor sin 0.00")) %>%
kable_material()
tabla_prov_cob
| Estadístico | Valor | Valor sin 0.00 |
|---|---|---|
| Minimo | 0.00 | 1.00 |
| Maximo | 10000.00 | 10000.00 |
| Mediana | 0.00 | 86.00 |
| Media | 23.08 | 233.57 |
| Desviacion_Estandar | 136.08 | 371.80 |
| Varianza | 18517.89 | 138232.23 |
| Q1 | 0.00 | 37.00 |
| Q3 | 0.00 | 351.00 |
| Rango | 10000.00 | 9999.00 |
| Rango_Intercuartilico | 0.00 | 314.00 |
| Moda | 0.00 | 53.00 |
# PLOT HISTOGRAMA PROVISIÓN COBERTURA
plot_hist_dens_prov_cob <- ggplot(LS_train, aes(x=prov_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. prov_cob", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PROVISIÓN COBERTURA
plot_boxplot_prov_cob <- ggplot(LS_train, aes(y=prov_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot prov_cob") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PROVISIÓN COBERTURA
plot_geomplot_prov_cob <- ggplot(LS_train, aes(x=seq_along(prov_cob), y=prov_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot prov_cob", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PROVISIÓN COBERTURA
plot_qqplot_prov_cob <- ggplot(LS_train, aes(sample=prov_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train$prov_cob, na.rm=TRUE), sd=sd(LS_train$prov_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot prov_cob") +
theme(plot.title = element_text(hjust = 0.5))
# Filtrar el dataset para excluir los valores de 0.00 en prov_cob
LS_train_filtered_prov_cob_0.00 <- LS_train %>% filter(prov_cob != 0.00)
# PLOT HISTOGRAMA PROVISIÓN COBERTURA SIN 0.00
plot_hist_dens_prov_cob_filtered_0.00 <- ggplot(LS_train_filtered_prov_cob_0.00, aes(x=prov_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. prov_cob <> 0.00", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PROVISIÓN COBERTURA SIN 0.00
plot_boxplot_prov_cob_filtered_0.00 <- ggplot(LS_train_filtered_prov_cob_0.00, aes(y=prov_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot prov_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PROVISIÓN COBERTURA SIN 0.00
plot_geomplot_prov_cob_filtered_0.00 <- ggplot(LS_train_filtered_prov_cob_0.00, aes(x=seq_along(prov_cob), y=prov_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot prov_cob <> 0.00", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PROVISIÓN COBERTURA SIN 0.00
plot_qqplot_prov_cob_filtered_0.00 <- ggplot(LS_train_filtered_prov_cob_0.00, aes(sample=prov_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train_filtered_prov_cob_0.00$prov_cob, na.rm=TRUE), sd=sd(LS_train_filtered_prov_cob_0.00$prov_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot prov_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
grid.arrange(plot_hist_dens_prov_cob,
plot_hist_dens_prov_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_boxplot_prov_cob,
plot_boxplot_prov_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_geomplot_prov_cob,
plot_geomplot_prov_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_qqplot_prov_cob,
plot_qqplot_prov_cob_filtered_0.00,
ncol=2)
PAGO TOTAL COBERTURA
# Estadísticas descriptivas para pago_total_cob
stats_pago_total_cob <- LS_train %>%
summarize(
Minimo = round(min(pago_total_cob, na.rm = TRUE), 2),
Maximo = round(max(pago_total_cob, na.rm = TRUE), 2),
Mediana = round(median(pago_total_cob, na.rm = TRUE), 2),
Media = round(mean(pago_total_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(pago_total_cob, na.rm = TRUE), 2),
Varianza = round(var(pago_total_cob, na.rm = TRUE), 2),
Q1 = round(quantile(pago_total_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(pago_total_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor")
# Estadísticas descriptivas para pago_total_cob excluyendo 0.00
stats_pago_total_cob_sin_ceros <- LS_train %>%
filter(pago_total_cob != 0.00) %>%
summarize(
Minimo = round(min(pago_total_cob, na.rm = TRUE), 2),
Maximo = round(max(pago_total_cob, na.rm = TRUE), 2),
Mediana = round(median(pago_total_cob, na.rm = TRUE), 2),
Media = round(mean(pago_total_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(pago_total_cob, na.rm = TRUE), 2),
Varianza = round(var(pago_total_cob, na.rm = TRUE), 2),
Q1 = round(quantile(pago_total_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(pago_total_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor_sin_ceros")
# Agregamos la moda como una fila adicional con 0.00 y sin 0.00
mode_value_pago_total_cob <- as.numeric(names(sort(table(LS_train$pago_total_cob), decreasing = TRUE)[1]))
stats_pago_total_cob <- rbind(stats_pago_total_cob, data.frame(Estadístico = "Moda", Valor = round(mode_value_pago_total_cob, 2)))
mode_value_pago_total_cob_sin_ceros <- as.numeric(names(sort(table(filter(LS_train, pago_total_cob != 0.00)$pago_total_cob), decreasing = TRUE)[1]))
stats_pago_total_cob_sin_ceros <- rbind(stats_pago_total_cob_sin_ceros, data.frame(Estadístico = "Moda", Valor_sin_ceros = round(mode_value_pago_total_cob_sin_ceros, 2)))
# Fusionamos las dos tablas
stats_pago_total_cob <- left_join(stats_pago_total_cob, stats_pago_total_cob_sin_ceros, by = "Estadístico")
# Convertir la tabla a kbl
tabla_pago_total_cob <- kbl(stats_pago_total_cob, align = c("c", "c", "c"), col.names = c("Estadístico", "Valor", "Valor sin 0.00")) %>%
kable_material()
tabla_pago_total_cob
| Estadístico | Valor | Valor sin 0.00 |
|---|---|---|
| Minimo | -544.50 | -544.50 |
| Maximo | 10500.00 | 10500.00 |
| Mediana | 0.00 | 115.23 |
| Media | 125.28 | 311.27 |
| Desviacion_Estandar | 457.35 | 679.57 |
| Varianza | 209171.14 | 461811.53 |
| Q1 | 0.00 | 100.43 |
| Q3 | 104.55 | 187.38 |
| Rango | 11044.50 | 11044.50 |
| Rango_Intercuartilico | 104.55 | 86.95 |
| Moda | 0.00 | 100.43 |
# PLOT HISTOGRAMA PAGO TOTAL COBERTURA
plot_hist_dens_pago_total_cob <- ggplot(LS_train, aes(x=pago_total_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. pago_total_cob", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PAGO TOTAL COBERTURA
plot_boxplot_pago_total_cob <- ggplot(LS_train, aes(y=pago_total_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot pago_total_cob") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PAGO TOTAL COBERTURA
plot_geomplot_pago_total_cob <- ggplot(LS_train, aes(x=seq_along(pago_total_cob), y=pago_total_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot pago_total_cob", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PAGO TOTAL COBERTURA
plot_qqplot_pago_total_cob <- ggplot(LS_train, aes(sample=pago_total_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train$pago_total_cob, na.rm=TRUE), sd=sd(LS_train$pago_total_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot pago_total_cob") +
theme(plot.title = element_text(hjust = 0.5))
# Filtrar el dataset para excluir los valores de 0.00 en pago_total_cob
LS_train_filtered_pago_total_cob_0.00 <- LS_train %>% filter(pago_total_cob != 0.00)
# PLOT HISTOGRAMA PAGO TOTAL COBERTURA SIN 0.00
plot_hist_dens_pago_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_pago_total_cob_0.00, aes(x=pago_total_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. pago_total_cob <> 0.00", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT PAGO TOTAL COBERTURA SIN 0.00
plot_boxplot_pago_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_pago_total_cob_0.00, aes(y=pago_total_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot pago_total_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT PAGO TOTAL COBERTURA SIN 0.00
plot_geomplot_pago_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_pago_total_cob_0.00, aes(x=seq_along(pago_total_cob), y=pago_total_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot pago_total_cob <> 0.00", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT PAGO TOTAL COBERTURA SIN 0.00
plot_qqplot_pago_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_pago_total_cob_0.00, aes(sample=pago_total_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train_filtered_pago_total_cob_0.00$pago_total_cob, na.rm=TRUE), sd=sd(LS_train_filtered_pago_total_cob_0.00$pago_total_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot pago_total_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
grid.arrange(plot_hist_dens_pago_total_cob,
plot_hist_dens_pago_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_boxplot_pago_total_cob,
plot_boxplot_pago_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_geomplot_pago_total_cob,
plot_geomplot_pago_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_qqplot_pago_total_cob,
plot_qqplot_pago_total_cob_filtered_0.00,
ncol=2)
COSTE TOTAL COBERTURA
# Estadísticas descriptivas para coste_total_cob
stats_coste_total_cob <- LS_train %>%
summarize(
Minimo = round(min(coste_total_cob, na.rm = TRUE), 2),
Maximo = round(max(coste_total_cob, na.rm = TRUE), 2),
Mediana = round(median(coste_total_cob, na.rm = TRUE), 2),
Media = round(mean(coste_total_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(coste_total_cob, na.rm = TRUE), 2),
Varianza = round(var(coste_total_cob, na.rm = TRUE), 2),
Q1 = round(quantile(coste_total_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(coste_total_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor")
# Estadísticas descriptivas para coste_total_cob excluyendo 0.00
stats_coste_total_cob_sin_ceros <- LS_train %>%
filter(coste_total_cob != 0.00) %>%
summarize(
Minimo = round(min(coste_total_cob, na.rm = TRUE), 2),
Maximo = round(max(coste_total_cob, na.rm = TRUE), 2),
Mediana = round(median(coste_total_cob, na.rm = TRUE), 2),
Media = round(mean(coste_total_cob, na.rm = TRUE), 2),
Desviacion_Estandar = round(sd(coste_total_cob, na.rm = TRUE), 2),
Varianza = round(var(coste_total_cob, na.rm = TRUE), 2),
Q1 = round(quantile(coste_total_cob, 0.25, na.rm = TRUE), 2),
Q3 = round(quantile(coste_total_cob, 0.75, na.rm = TRUE), 2)
) %>%
mutate(
Rango = round(Maximo - Minimo, 2),
Rango_Intercuartilico = round(Q3 - Q1, 2)
) %>%
gather("Estadístico", "Valor_sin_ceros")
# Agregamos la moda como una fila adicional con 0.00 y sin 0.00
mode_value_coste_total_cob <- as.numeric(names(sort(table(LS_train$coste_total_cob), decreasing = TRUE)[1]))
stats_coste_total_cob <- rbind(stats_coste_total_cob, data.frame(Estadístico = "Moda", Valor = round(mode_value_coste_total_cob, 2)))
mode_value_coste_total_cob_sin_ceros <- as.numeric(names(sort(table(filter(LS_train, coste_total_cob != 0.00)$coste_total_cob), decreasing = TRUE)[1]))
stats_coste_total_cob_sin_ceros <- rbind(stats_coste_total_cob_sin_ceros, data.frame(Estadístico = "Moda", Valor_sin_ceros = round(mode_value_coste_total_cob_sin_ceros, 2)))
# Fusionamos las dos tablas
stats_coste_total_cob <- left_join(stats_coste_total_cob, stats_coste_total_cob_sin_ceros, by = "Estadístico")
# Convertir la tabla a kbl
tabla_coste_total_cob <- kbl(stats_coste_total_cob, align = c("c", "c", "c"), col.names = c("Estadístico", "Valor", "Valor sin 0.00")) %>%
kable_material()
tabla_coste_total_cob
| Estadístico | Valor | Valor sin 0.00 |
|---|---|---|
| Minimo | -544.50 | -544.50 |
| Maximo | 10575.69 | 10575.69 |
| Mediana | 0.00 | 117.67 |
| Media | 148.37 | 323.80 |
| Desviacion_Estandar | 475.80 | 661.26 |
| Varianza | 226383.50 | 437264.81 |
| Q1 | 0.00 | 100.43 |
| Q3 | 112.29 | 257.74 |
| Rango | 11120.19 | 11120.19 |
| Rango_Intercuartilico | 112.29 | 157.31 |
| Moda | 0.00 | 100.43 |
# PLOT HISTOGRAMA COSTE TOTAL COBERTURA
plot_hist_dens_coste_total_cob <- ggplot(LS_train, aes(x=coste_total_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. coste_total_cob", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT COSTE TOTAL COBERTURA
plot_boxplot_coste_total_cob <- ggplot(LS_train, aes(y=coste_total_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot coste_total_cob") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT COSTE TOTAL COBERTURA
plot_geomplot_coste_total_cob <- ggplot(LS_train, aes(x=seq_along(coste_total_cob), y=coste_total_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot coste_total_cob", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT COSTE TOTAL COBERTURA
plot_qqplot_coste_total_cob <- ggplot(LS_train, aes(sample=coste_total_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train$coste_total_cob, na.rm=TRUE), sd=sd(LS_train$coste_total_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot coste_total_cob") +
theme(plot.title = element_text(hjust = 0.5))
# Filtrar el dataset para excluir los valores de 0.00 en coste_total_cob
LS_train_filtered_coste_total_cob_0.00 <- LS_train %>% filter(coste_total_cob != 0.00)
# PLOT HISTOGRAMA COSTE TOTAL COBERTURA SIN 0.00
plot_hist_dens_coste_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_coste_total_cob_0.00, aes(x=coste_total_cob)) +
geom_histogram(aes(y=..density..), fill="#009494", bins=20) +
geom_density(alpha=0.2, color="#D55E00") +
labs(title="Hist. y Dens. coste_total_cob <> 0.00", y="Densidad") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT BOXPLOT COSTE TOTAL COBERTURA SIN 0.00
plot_boxplot_coste_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_coste_total_cob_0.00, aes(y=coste_total_cob)) +
geom_boxplot(fill="#009494", outlier.color="#D55E00", outlier.shape=16, outlier.size=2) +
labs(title="Boxplot coste_total_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT SCATTERPLOT COSTE TOTAL COBERTURA SIN 0.00
plot_geomplot_coste_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_coste_total_cob_0.00, aes(x=seq_along(coste_total_cob), y=coste_total_cob)) +
geom_point(color="#009494", alpha=0.4) +
labs(title="Scatter Plot coste_total_cob <> 0.00", x="Índice", y="Valor") +
theme(plot.title = element_text(hjust = 0.5))
# PLOT QQPLOT COSTE TOTAL COBERTURA SIN 0.00
plot_qqplot_coste_total_cob_filtered_0.00 <- ggplot(LS_train_filtered_coste_total_cob_0.00, aes(sample=coste_total_cob)) +
stat_qq(distribution=stats::qnorm, dparams=list(mean=mean(LS_train_filtered_coste_total_cob_0.00$coste_total_cob, na.rm=TRUE), sd=sd(LS_train_filtered_coste_total_cob_0.00$coste_total_cob, na.rm=TRUE))) +
geom_abline(intercept=0, slope=1, color="#D55E00") +
labs(title="Q-Q Plot coste_total_cob <> 0.00") +
theme(plot.title = element_text(hjust = 0.5))
grid.arrange(plot_hist_dens_coste_total_cob,
plot_hist_dens_coste_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_boxplot_coste_total_cob,
plot_boxplot_coste_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_geomplot_coste_total_cob,
plot_geomplot_coste_total_cob_filtered_0.00,
ncol=2)
grid.arrange(plot_qqplot_coste_total_cob,
plot_qqplot_coste_total_cob_filtered_0.00,
ncol=2)
RESUMEN SINIESTROS
total_siniestros <- nrow(LS_train)
# Para prov_inicial_cob
cantidad_prov_inicial_0.00 <- nrow(LS_train %>% filter(prov_inicial_cob == 0.00))
porcentaje_prov_inicial_0.00 <- round((cantidad_prov_inicial_0.00 / total_siniestros) * 100, 2)
cantidad_prov_inicial_no_0.00 <- nrow(LS_train %>% filter(prov_inicial_cob != 0.00))
porcentaje_prov_inicial_no_0.00 <- round((cantidad_prov_inicial_no_0.00 / total_siniestros) * 100, 2)
# Para prov_cob
cantidad_prov_cob_0.00 <- nrow(LS_train %>% filter(prov_cob == 0.00))
porcentaje_prov_cob_0.00 <- round((cantidad_prov_cob_0.00 / total_siniestros) * 100, 2)
cantidad_prov_cob_no_0.00 <- nrow(LS_train %>% filter(prov_cob != 0.00))
porcentaje_prov_cob_no_0.00 <- round((cantidad_prov_cob_no_0.00 / total_siniestros) * 100, 2)
# Para pago_total_cob
cantidad_pago_total_0.00 <- nrow(LS_train %>% filter(pago_total_cob == 0.00))
porcentaje_pago_total_0.00 <- round((cantidad_pago_total_0.00 / total_siniestros) * 100, 2)
cantidad_pago_total_no_0.00 <- nrow(LS_train %>% filter(pago_total_cob != 0.00))
porcentaje_pago_total_no_0.00 <- round((cantidad_pago_total_no_0.00 / total_siniestros) * 100, 2)
# Para coste_total_cob
cantidad_coste_total_0.00 <- nrow(LS_train %>% filter(coste_total_cob == 0.00))
porcentaje_coste_total_0.00 <- round((cantidad_coste_total_0.00 / total_siniestros) * 100, 2)
cantidad_coste_total_no_0.00 <- nrow(LS_train %>% filter(coste_total_cob != 0.00))
porcentaje_coste_total_no_0.00 <- round((cantidad_coste_total_no_0.00 / total_siniestros) * 100, 2)
# Presentar los resultados
resumen_siniestros <- data.frame(
Variable = c("prov_inicial_cob", "prov_cob", "pago_total_cob", "coste_total_cob"),
Cantidad_0.00 = c(cantidad_prov_inicial_0.00, cantidad_prov_cob_0.00, cantidad_pago_total_0.00, cantidad_coste_total_0.00),
Porcentaje_0.00 = c(porcentaje_prov_inicial_0.00, porcentaje_prov_cob_0.00, porcentaje_pago_total_0.00, porcentaje_coste_total_0.00),
Cantidad_no_0.00 = c(cantidad_prov_inicial_no_0.00, cantidad_prov_cob_no_0.00, cantidad_pago_total_no_0.00, cantidad_coste_total_no_0.00),
Porcentaje_no_0.00 = c(porcentaje_prov_inicial_no_0.00, porcentaje_prov_cob_no_0.00, porcentaje_pago_total_no_0.00, porcentaje_coste_total_no_0.00)
)
# Presentar los resultados en una tabla estilizada con kbl
resumen_siniestros_kbl <- kbl(resumen_siniestros, align = c("c", "c", "c", "c")) %>%
kable_material()
resumen_siniestros_kbl
| Variable | Cantidad_0.00 | Porcentaje_0.00 | Cantidad_no_0.00 | Porcentaje_no_0.00 |
|---|---|---|---|---|
| prov_inicial_cob | 240 | 0.33 | 71725 | 99.67 |
| prov_cob | 64853 | 90.12 | 7112 | 9.88 |
| pago_total_cob | 43000 | 59.75 | 28965 | 40.25 |
| coste_total_cob | 38990 | 54.18 | 32975 | 45.82 |
Las conclusiones que podemos sacar tras este análisis univariante cuantitativo son las siguientes:
Hay excasos registros que tengan 0.00€ de provisión inicial, apenas un 0.33%, y esto tiene sentido porque cuando se comunica un siniestro y se abre, siempre debe llevar aparejado un importe estimado de coste al que llamamos reserva o reserva inicial. En todo caso, los 240 siniestros cuyo importe de reserva inicial es 0.00€ son siniestros que se han aperturado mal y en su momento el tramitador cometió el error de no grabar ninguna reserva. No apreciamos apenas diferencias en los estadísticos con zeros y sin ellos, así como el los gráficos que llevan aparejados. Vemos una gran cantidad de datos por debajo de los 130€ y luego diversos datos atípicos.
Respecto a la variable provisión cobertura si que hay diferencias significativas en los estadísticos si quitamos los zeros de los que no. El procentaje de siniestros con prov_cob 0.00 es del 90% lo que tiene bastante sentido si nos percatamos de que el mismo porcentaje de siniestros está cerrado. Esto es una máxima en el mundo de los seguros, todo siniestro abierto tiene que tener una provisión / reserva, y todo siniestro cerrado tiene que tener esta variable a 0, si no, sería una incongruencia. La provisión media se sitúa en torno a los 230€ pero tiene una desviación estándar bastante alta. Hay diversos datos atípicos o también llamados siniestros punta por encima de los 2.000€.
En cuenta a la variable pago total por cobertura sucede lo mismo que con la anterior, existen diferencias entre eliminar los siniestros coste zero ya que aumenta el valor medio de las indemnizaciones de 125€ a más de 300€; y esto se debe a que en la bbdds actual casi un 60% de los siniestros no tienen pagos.
Coste total por cobertura: es el dato cuantitativo realmente relevante en este análisis ya que tiene en cuenta los pagos y reservas anteriores y revela cual será el coste real de un siniestro. Efectivamente al igual que sucede con prov_cob y pagos_total_cob, también hay diferencias entre considerar los siniestros zero y no considerarlos ya que la realidad de LS Insurance es que casi el 55% de los siniestros acaban siendo siniestros con coste 0.
SINIESTROS PUNTA